/* 
 * locale.h
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is a part of the clang port package.
 * No warranty is given; refer to the file DISCLAIMER within the package.
 *
 * Functions and types for localization (ie. changing the appearance of
 * output based on the standards of a certain country).
 *
 */

#ifndef	_CLANG_PORT_LOCALE_H_
#define	_CLANG_PORT_LOCALE_H_

/* All the headers include this file. */
#ifndef __IMPL_CLANG_PORT_API_
#	include <_clang_port.h>
#else
#	include <include/_clang_port.h>
#endif

#include <stddef.h>

#ifndef __IMPL_CLANG_PORT_API_
#define	LC_ALL		0
#define LC_COLLATE	1
#define LC_CTYPE	2
#define	LC_MONETARY	3
#define	LC_NUMERIC	4
#define	LC_TIME		5
#define	LC_MIN		LC_ALL
#define	LC_MAX		LC_TIME


/*
 * The structure returned by 'localeconv'.
 */
struct lconv
{
	char*	decimal_point;
	char*	thousands_sep;
	char*	grouping;
	char*	int_curr_symbol;
	char*	currency_symbol;
	char*	mon_decimal_point;
	char*	mon_thousands_sep;
	char*	mon_grouping;
	char*	positive_sign;
	char*	negative_sign;
	char	int_frac_digits;
	char	frac_digits;
	char	p_cs_precedes;
	char	p_sep_by_space;
	char	n_cs_precedes;
	char	n_sep_by_space;
	char	p_sign_posn;
	char	n_sign_posn;
};
#endif // __IMPL_CLANG_PORT_API_

#ifdef	__cplusplus
extern "C" {
#endif

/* 
 * Clang port Api.
*/
	typedef char* CLANG_PORT_FPTR_TYPE(setlocale)(int, const char*);
	extern CLANG_PORT_FPTR_VAR(setlocale);
	typedef struct lconv* CLANG_PORT_FPTR_TYPE(localeconv)(void);
	extern CLANG_PORT_FPTR_VAR(localeconv);

#ifndef __IMPL_CLANG_PORT_API_
/*
 * STD C Api.
 */
CLANG_PORT_INLINE char* setlocale(int category, const char*locale)
{
	return CLANG_PORT_CALL_FPTR(setlocale)(category,locale);
}
CLANG_PORT_INLINE struct lconv* localeconv(void)
{
	return CLANG_PORT_CALL_FPTR(localeconv)();
}

#endif /* __IMPL_CLANG_PORT_API_ */

#ifdef	__cplusplus
}
#endif


#endif	/* Not _CLANG_PORT_LOCALE_H_ */

